require 'fox16'
require './Bd'
include Fox

class FXFoldingListBd < FXFoldingList
  
  attr_reader :accion
  
  def initialize(m,sql)
    super m,nil,:opts => LAYOUT_FILL_X|LAYOUT_FILL_Y|LAYOUT_TOP|LAYOUT_RIGHT|FOLDINGLIST_SHOWS_LINES|FOLDINGLIST_SHOWS_BOXES|FOLDINGLIST_ROOT_BOXES|FOLDINGLIST_EXTENDEDSELECT 
    
    @qry=Bd.new(sql) # comunicación con la BD, menupaths. Carga la consulta
    @qry.run('')
    filltreeview(sql) #Ahora construimos el menu principal
    
    self.connect(SEL_LEFTBUTTONRELEASE) do |sender, sel, event|
          unless event.moved?
              item = sender.getItemAt(event.win_x, event.win_y)
              unless item.nil?
                 @accion=@qry.at('metodo',:new, item.data)
              end
          end
    end
    
   end
   
   def filltreeview(basesql)
        self.clearItems(false)
        self.setHeaders(['Menu'],500)
        iconopen,iconclose = nil, nil
        #@items=Hash.new #variable hash que contiene como índices los textos, y como valores los nodos del treeview
        @items=[] #es un Hash, donde las claves son interos, y los valores items de treelist
        @qry.at("id",:new).each_with_index do |elto,is| # por cada elemento del menú
          i=is.to_i #por algún motivo is es una string cuando debería ser un entero.
          #puts "i= #{i} qrycampos=#{@}" 
          padre=@qry.at("padre_id",:new,i) #obtenemos cual es el id del elemento padre
          padre=@items[@qry.at("id",:new).find_index(padre)] if padre #si es 0,no tiene padre (nulo). Si no, buscamos la psoición i que ocupa el padre_id
          iconopen=Bd.makeIcon(getApp(),@qry.at("iconopen",:new,i)) if @qry.campos.keys.include?('iconopen') if @qry.at("iconopen",:new,i)# Si estamos en el menú
          iconclosed=Bd.makeIcon(getApp(),@qry.at("iconclosed",:new,i)) if @qry.campos.keys.include?('iconclosed') if @qry.at("iconclosed",:new,i)
          @items[i]=self.appendItem(padre, @qry.at("texto",:new, i),iconopen,iconclosed)
          @items[i].data=i
        end
   end
        
end
